C语言易错题100例精讲
📚 共计 100 章节
01
指针与数组的恩怨
数组名真的是指针吗?&arr 和 arr 的区别。
指针
数组
02
const 关键字的各种用法
const int *p, int *const p, const int *const p 的区别。
const
指针
03
结构体对齐与内存布局
为什么我的结构体大小和我想的不一样?
结构体
内存对齐
04
字符串函数的安全隐患
strcpy、strcat、sprintf 的缓冲区溢出问题。
字符串
安全
05
宏定义的陷阱
#define SQUARE(x) x*x 为什么不对?
宏
预处理
06
static 关键字的三种作用
局部变量、全局变量、函数。
static
作用域
07
volatile 关键字
什么时候必须用?编译器优化带来的坑。
volatile
编译器
08
指针的指针
二级指针到底有什么用?
指针
二级指针
09
函数指针与回调函数
如何实现一个简单的计算器?
函数指针
回调
10
动态内存分配
malloc、calloc、realloc、free 的常见错误。
内存
malloc
11
野指针与悬空指针
它们是怎么产生的?如何避免?
指针
悬空
12
数组越界
为什么 C 语言不检查数组越界?
数组
越界
13
字符串字面量
为什么不能修改 char *p = "hello"; ?
字符串
常量
14
sizeof 与 strlen 的区别
它们到底在算什么?
sizeof
strlen
15
位运算的妙用
如何用位运算实现权限管理?
位运算
权限
16
枚举与宏定义
什么时候用枚举,什么时候用宏?
枚举
宏
17
联合体(union)的妙用
如何用 union 解析数据包?
union
数据解析
18
typedef 与 #define 的区别
它们真的可以互换吗?
typedef
宏
19
头文件重复包含
#ifndef、#pragma once 怎么用?
头文件
预处理
20
可变参数函数
printf 是怎么实现不定参数的?
可变参数
printf
21
递归函数的陷阱
斐波那契数列为什么那么慢?
递归
性能
22
main 函数的参数
argc 和 argv 到底怎么用?
main
命令行
23
文件操作
fopen、fclose、fread、fwrite 的常见错误。
文件
IO
24
标准输入输出缓冲区
setbuf、fflush 的作用。
缓冲区
IO
25
随机数生成
rand 和 srand 的正确用法。
随机数
rand
26
断言 assert
什么时候用?怎么用?
断言
调试
27
错误处理
errno 和 perror 的使用。
错误
errno
28
goto 语句
为什么说它有害?什么时候可以用?
goto
控制流
29
switch 语句的穿透
break 忘了写会怎样?
switch
break
30
for 循环的逗号表达式
for(i=0,j=0; i<10; i++,j++) 是怎么工作的?
for
逗号
31
do-while 循环
它和 while 循环的根本区别。
循环
do-while
32
break 与 continue
它们到底跳出了哪层循环?
break
continue
33
条件运算符(三目运算符)的嵌套
a?b:c?d:e 怎么理解?
三目
运算符
34
运算符优先级
*p++ 到底先做哪个运算?
优先级
指针
35
类型转换
隐式类型转换的陷阱。
类型转换
隐式
36
整数溢出
有符号整数溢出是未定义行为。
溢出
未定义
37
浮点数比较
为什么不能直接用 == 比较浮点数?
浮点
比较
38
void 指针
void* 有什么用?如何解引用?
void*
指针
39
空指针与 NULL
NULL、0、nullptr 的区别。
NULL
空指针
40
内存泄漏
如何检测和避免内存泄漏?
内存泄漏
检测
41
二维数组与指针
int a[3][4] 和 int **p 为什么不一样?
二维数组
指针
42
指针数组与数组指针
int *p[5] 和 int (*p)[5] 的区别。
指针数组
数组指针
43
函数返回局部变量
为什么不能返回局部变量的地址?
局部变量
返回
44
静态局部变量
它和普通局部变量有什么不同?
static
局部变量
45
全局变量与 extern
如何跨文件使用全局变量?
全局变量
extern
46
register 关键字
现代编译器还需要它吗?
register
优化
47
inline 函数
它和宏有什么区别?
inline
宏
48
回调函数
如何用函数指针实现回调?
回调
函数指针
49
qsort 函数
如何用 qsort 对结构体排序?
qsort
排序
50
链表操作
头插法、尾插法、删除节点。
链表
插入
51
栈与队列
如何用数组实现一个栈?
栈
队列
52
二叉树遍历
前序、中序、后序、层序。
二叉树
遍历
53
哈希表
如何用 C 实现一个简单的哈希表?
哈希表
查找
54
排序算法
冒泡、选择、插入、快速排序的实现与比较。
排序
算法
55
查找算法
二分查找的边界条件。
二分查找
边界
56
字符串反转
如何原地反转一个字符串?
字符串
反转
57
atoi 的实现
如何将字符串转换为整数?
atoi
转换
58